/**
 * 中间件
 */

/**
 * 定义一个全局的中间件， 封装一个res.send() 方法
 * @param {*} req
 * @param {*} res
 * @param {*} next
 */
function resSendMiddleware(req, res, next) {
  res.commonResSend = (status, message, data) => {
    res.send({
      status,
      message,
      data: data || null,
    });
  };
  next();
}

/**
 * 自定义异常类，用于创建自定义异常对象
 */
class CustomError extends Error {
  /**
   * @param {*} message
   * @param {*} statusCode
   */
  constructor(message, statusCode) {
    super(message);
    this.statusCode = statusCode;
  }
}

/**
 * 统一异常处理中间件
 * @param {*} err
 * @param {*} req
 * @param {*} res
 * @param {*} next
 */
function errorHandler(err, req, res, next) {
  // 检查是否是自定义异常
  if (err instanceof CustomError) {
    // 如果是自定义异常，可以根据需要处理
    res.status(err.statusCode).json({ msg: err.message, code: err.statusCode });
  } else {
    // 如果是其他类型的异常，可以返回通用错误信息
    res.status(err.status || 500).json({
      code: err.status || 500,
      msg: err.message || "Internal Server Error",
    });
  }
}

module.exports = {
  resSendMiddleware,
  CustomError,
  errorHandler,
};
